#include "mainwindow.h"
#include "ui_mainwindow.h"

struct MainWindowPrivate
{
    MainWindowPrivate():
        _TextEdit(NULL)
    {}
    QTextEdit* _TextEdit;
};

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow),
    _p(new MainWindowPrivate)
{
    //ui->setupUi(this);
    _p->_TextEdit = new QTextEdit(this);
    setCentralWidget(_p->_TextEdit);

    _p->_TextEdit->setAcceptDrops(false);
    setAcceptDrops(true);

    setWindowTitle(tr("Text Editor"));
}

MainWindow::~MainWindow()
{
    delete ui;
    delete _p;
}

bool MainWindow::ReadFile(const QString &FileName)
{
    assert(&FileName);
    bool r = false;
    QFile file(FileName);
    QString content;
    if(file.open(QIODevice::ReadOnly)) {
        content = file.readAll();
        r = true;
    }
    content += _p->_TextEdit->document()->toHtml();
    _p->_TextEdit->setText(content);
    return r;
}

void MainWindow::dragEnterEvent(QDragEnterEvent *event)
{
    if (event->mimeData()->hasFormat("text/uri-list")) { // 发现mime类型的数据中有text/uri-list格式的数据，
        //就会让本窗口组件接受 允许被拖进事件
            event->acceptProposedAction(); // 接受当前窗口预期的动作（拖放），向用户暗示，你可以将拖动的对象放在这个组件上
        }

}



void MainWindow::dropEvent(QDropEvent *event)
{
    QList<QUrl> urls = event->mimeData()->urls();
    if (urls.isEmpty()) {
        return;
    }

    QString fileName = urls.first().toLocalFile(); // 通过URL列表获取第一个，然后转为本地文件路径
    if (fileName.isEmpty()) {
        return;
    }

    if(ReadFile(fileName))  // 读取文件内容，同时将文件内容设置到TextEdit中，如果成功就返回true
    {
        setWindowTitle(tr("%1 - %2").arg(fileName, tr("Drag File")));
    }
}


